package dbinit.csv;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import core.attribute.model.Attribute;
import core.attribute.model.AttributeSet;
import core.attribute.model.AttributeValue;

import dbinit.InitAttribute;
import dbinit.InitAttributeSet;
import dbinit.InitAttributeValue;
import dbinit.InitFlatAttributes;
import dbinit.csv.csvreader.CsvReader;

public class ImportAttribute 
{

	public static void buildAttributeFlatIndex()
	{
		InitFlatAttributes.refresh();
		List <AttributeSet> attrSetLst = InitAttributeSet.listAll();
		if(attrSetLst != null)
		{
			Iterator <AttributeSet>attrSetItr = attrSetLst.iterator();
			while(attrSetItr.hasNext())
			{
				AttributeSet as = attrSetItr.next();
				Set<Attribute> aLst = as.getAttributes();
				if(aLst != null)
				{
					Iterator<Attribute> aItr = aLst.iterator();
					while(aItr.hasNext())
					{
						Attribute a = aItr.next();
						InitFlatAttributes.doInit(as, a);
					}
				}
			}
		}
	}
	public static void doImport()
	{
		try 
		{
				System.out.println("start import attributes");
				CsvReader data = new CsvReader("source/attribute.csv");
				data.readHeaders();
				int count = 0 ;
				while (data.readRecord())
				{
					String attributeSet = data.get("AttributeSet");
					String attribute = data.get("Attribute");
					String attributeValues = data.get("AttributeValues"); 
					String attributeType = data.get("AttributeType"); 
					if(attributeSet == null || attributeSet.trim() == "")
					{
						attributeSet = "General" ;
					}
					AttributeSet as = InitAttributeSet.getAttributeSetByName(attributeSet);
					Set<Attribute> attributes = null ;
					if(as == null)
					{
						attributes = new HashSet<Attribute>();
					}
					else
					{
						attributes = as.getAttributes();
					}
					if(attribute != null && attribute.trim() != "" && attributeType != null && attributeType.trim()!= "")
					{
						attribute = attribute.trim();
						attributeType = attributeType.trim();
						Boolean multivalued = true ;
						if(attributeType.equals("textbox"))
						{
							multivalued = false ;
							Attribute atrb = InitAttribute.getAttributeByName(attribute);
							if(atrb == null)
							{
								atrb = InitAttribute.getAttributeByUuid(InitAttribute.doinit(attribute, null, multivalued));
								attributes.add(atrb);
							}
						}
						else 
						{
							multivalued = true ;
							Attribute atrb = InitAttribute.getAttributeByName(attribute);
							Set <AttributeValue> atrvs = null ;
							if(atrb == null)
							{
								atrvs = new HashSet<AttributeValue>();
							}
							else
							{
								atrvs = atrb.getValues();
							}
							if(attributeType.equals("dropdown"))
							{	
								String options = data.get("options"); 
								if(options != null && options.trim() != "")
								{
									options = options.trim();
									AttributeValue av = InitAttributeValue.getAttributeValueByUuid(InitAttributeValue.doinit(options, attributeType));
									atrvs.add(av);
								}
							}
							else
							{
								if(attributeValues != null && attributeValues.trim() != "")
								{
									attributeValues = attributeValues.trim();
									AttributeValue av = InitAttributeValue.getAttributeValueByUuid(InitAttributeValue.doinit(attributeValues, attributeType));
									atrvs.add(av);
								}
							}
							atrb  = InitAttribute.getAttributeByUuid(InitAttribute.doinit(attribute, atrvs, multivalued));
							attributes.add(atrb);
							
						}
					}
					InitAttributeSet.doinit(attributeSet, attributes);
				}
				//buildAttributeFlatIndex();
		}
		catch (FileNotFoundException e)
		{
			e.printStackTrace();
		} 
		catch (IOException e) 
		{
			e.printStackTrace();
		} 
	}
	public static void main(String[] args) 
	{
		// TODO Auto-generated method stub
		doImport();
	}

}
